﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects;
using Entidades;
using System.Collections;


namespace CapaDatos.Adapters
{
    public class ParentescoAdapter
    {
        BDRinconLuzEntities contexto;

        public ParentescoAdapter()
        {
            contexto = RinconLuzContext.Context;
        }

        public ParentescoAdapter(string edicion)
        {
            contexto = RinconLuzContext.ContextNew;
        }

        public void Agregar(Parentesco entidad)
        {
            if (entidad == null)
            {
                throw new ArgumentNullException("entidad", "La entidad no puede ser null.");
            }

            if (entidad.ChangeTracker != null && entidad.ChangeTracker.State == ObjectState.Added)
            {
                contexto.RegistrarCambios(entidad);
            }
        }

        public void Eliminar(Parentesco entidad)
        {
            if (entidad == null)
            {
                throw new ArgumentNullException("entidad", "La entidad no puede ser nula.");
            }

            IObjectSet<Parentesco> objectSet = contexto.CrearSet<Parentesco>();

            objectSet.Attach(entidad);
            objectSet.DeleteObject(entidad);
        }



        public void Modificar(Parentesco entidad)
        {
            if (entidad == null)
            {
                throw new ArgumentNullException("entidad", "La entidad no puede ser nula.");
            }

            if (entidad.ChangeTracker != null && (entidad.ChangeTracker.State & ObjectState.Deleted) != ObjectState.Deleted)
            {
                entidad.MarkAsModified();
            }

            contexto.SaveChanges();
        }


        public IEnumerable<Parentesco> Obtener()
        {
            return contexto.CrearSet<Parentesco>();
        }


        public Guid ObtenerIdMadreTutora()
        {
            var id = (from v in contexto.Parentesco
                               where v.Descripcion == "Madre o Tutora"                               
                               select v.IdParentesco).First();

            return id;

        }

        public Guid ObtenerIdPadreTutor()
        {
            var id = (from v in contexto.Parentesco
                      where v.Descripcion == "Padre o Tutor"
                      select v.IdParentesco).First();

            return id;

        }

        public List<ViewEntity> ObtenerPrentescosExcluyendoPadres()
        {
            var Parentescos = (from v in contexto.Parentesco
                                  where v.Descripcion != "Padre o Tutor" && v.Descripcion != "Madre o Tutora"
                                  select v).ToList();

            List<ViewEntity> listaFinal = new List<ViewEntity>();

            var query = (from v in Parentescos
                         select new
                         {
                             v.IdParentesco,
                             v.Descripcion
                         }
                         ).ToList();

            foreach (var a in query)
            {
                listaFinal.Add(new ViewEntity(a.IdParentesco, a.Descripcion));
            }

            listaFinal = listaFinal.OrderBy(v => v.Descripcion).ToList();

            return listaFinal;

        }



        public string ObtenerDescripcionPorId(Guid id)
        {
            var desc = (from v in contexto.Parentesco
                      where v.IdParentesco == id
                      select v.Descripcion).First();

            return desc;
        }


    }
}
